home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh1x
/
sh18a.d64
/
MPS 802 Ext.SRC.
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
8KB
|
311 lines
3 SYS9*4096
5 .OPT OO
10 IN = $EE83;ZEICHEN VOM SERIELLEN PORT LESEN
20 OUT = $F35F;ZEICHEN IN AUSGABEPUFFER
30 END = $EE66;SA BEARBEITUNG BEENDEN
40 PORT = $0240;MEMORY MANAGER
45 ;******** ORIGINAL BETRIEBSSYSTEM *******
50 *= $4400 ; ZEICHENSATZ AENDERN
51 .BYTE $3C,$40,$8C,$92,$9E,$42,$3C,$00;KLAMMERAFFE
52 *= $4858
53 .BYTE $FE,$08,$14,$22,$00,$00,$00,$00;KLEINES K
60 *= $4A79;ROM CHECK UMGEHEN
61 BNE Z1
62 Z1 INC $00
70 *= $4AB1;MEMORY MANAGEMENT
71 LDA #$01;BIT 0 SETZEN OHNE SPEICHERVERTEILUNG
72 JSR Z9;ZU AENDERN
73 JSR $EC61;INITIALISIEREN DER PORTS
80 *= $5B02;MEMORY MANAGEMENT
81 LDA PORT;LOW IMPULS VON 12 TAKTZYKLEN
82 AND #$FE; AUF BIT 0 LEGEN OHNE SPEICHER
83 STA PORT; VERTEILUNG ZU AENDERN
84 ORA #$01
85 JSR Z2
90 *= $5D01;*** MEMORY MANAGEMENT ***
91 Z9 ORA PORT
92 Z2 STA PORT
93 RTS
100 ;******** SPEZIAL BETRIEBSSYSTEM *******
101 *= $6400 ; ZEICHENSATZ AENDERN
110 .BYTE $3C,$40,$8C,$92,$9E,$42,$3C,$00;KLAMMERAFFE
120 *= $6858
130 .BYTE $FE,$08,$14,$22,$00,$00,$00,$00;KLEINES K
150 *= $6A79;ROM CHECK UMGEHEN
160 BNE I1
170 I1 INC $00
200 *= $6AB1;MEMORY MANAGEMENT
210 LDA #$01;BIT 0 SETZEN OHNE SPEICHERVERTEILUNG
220 JSR J9;ZU AENDERN
230 JSR $EC61;INITIALISIEREN DER PORTS
300 *= $6BBE;REV 7X
310 .BYTE $37,$58
400 *= $6D2C;ANZAHL DER ZULAESSIGEN SA
410 .BYTE $10
500 *= $6D3D;SA TABELLE
510 .WORD J2-1,$EDB8,$EDBB,$EDF2,$EE00
520 .WORD $EE09,$EE22,$EE29,J3-1,$EE41
530 .WORD $EE4A,J4-1,J5-1,$EE35,J6-1,J7-1
600 *= $6D69;ABFRAGE AUF NEUE STEUERZEICHEN
610 JSR J1
700 *= $6E36;SA 13 SPEICHERVERTEILUNG FESTLEGEN
710 LDA $64;CODE HOLEN
720 ORA #01;BIT 0 MUSS GESETZT BLEIBEN
730 NOP
740 NOP
750 STA PORT;SELEKTION GUELTIG
760 JMP END;MUSS UNBEDINGT HIER STEHEN
800 *= $7660;PAPERFEED ROUTINE
810 JMP J8;ZUR ERWEITERUNG
820 NOP
900 *= $7B02;MEMORY MANAGEMENT
910 LDA PORT;LOW IMPULS VON 12 TAKTZYKLEN
920 AND #$FE; AUF BIT 0 LEGEN OHNE SPEICHER
930 STA PORT; VERTEILUNG ZU AENDERN
940 ORA #$01
950 JSR A1
1000 *= $7D01;*** MEMORY MANAGEMENT ***
1010 J9 ORA PORT
1020 A1 STA PORT
1030 RTS
1100 ;*** PAPERFEED ***
1110 J8 LDA $60;PAGING OFF
1120 BMI B1;JA, DANN NEUE ROUTINE
1130 JMP $F664;SONST WIE GEHABT
1140 B1 LDA #$FF;VORSCHUB VON 255 ZEILEN ANSTOSSEN
1150 JSR $F646
1160 LDA #$08
1170 B2 BIT $0280;PAPERFEEDTASTE GEDRUECKT
1180 BEQ B2;JA, DANN WEITER WARTEN
1190 LDA #$00;SONST MOTOR ABWUERGEN
1200 STA $92
1210 RTS
1300 ;*** ANFANG VON SA0 ***
1310 J2 LDA $64;WIE BISHER, MUSSTE NUR PLATZ
1320 BIT $0202;FUER SA-TABELLENERWEITERUNG MACHEN
1330 BPL C1
1340 LDY #$00
1350 STY $87
1360 C1 JMP $ED5E
1400 ;*** SA8 WEIL DORT JETZT SA13 ***
1410 J3 BIT $0202
1420 BMI D1
1430 LDA #$00
1440 STA $87
1450 D1 JMP END
1500 ;*** SA11 ROM INS RAM ***
1510 J4 LDY #$00;KOPIEREN VON E400 BIS FFFF
1520 STY $80; LOWBYTE
1530 LDA #$E4
1540 STA $81; HIGHBYTE
1550 E1 LDA ($80),Y;ROM LESEN
1560 STA ($80),Y;IN RAM SCHREIBEN, UMSCHALTUNG DURCH
1570 INY; MEMORY MANAGER
1580 BNE E1
1590 INC $81
1600 BNE E1
1610 BEQ D1
1700 ;*** SA12 IN RAM SCHREIBEN ***
1710 J5 LDA $64;LOWBYTE DER ANFANGSADRESSE HOLEN
1720 STA $7E
1730 JSR IN;HIGHBYTE HOLEN
1740 BVS F1;SCHON ANDERE SA JA, DANN FEHLER
1750 LDA $64
1760 STA $7F
1770 F3 JSR IN;ZEICHEN LESEN
1780 BVS F2;ENDE, WENN NEUE SA KOMMT
1790 LDA $64
1800 LDX #$00
1810 STA ($7E,X);ZEICHEN IN RAM
1820 INC $7E
1830 BNE F3;NAECHSTES ZEICHEN
1840 INC $7F
1850 BNE F3;NAECHSTES ZEICHEN
1860 JMP $ED23;RAMTOP ERREICHT, ENDE
1870 F1 JMP $EE80;TERMINATOR ERROR
1880 F2 JMP $ED26;REGULAERES ENDE
3000 ;*** SA14 8BIT GRAPHIK ***
3010 J6 LDA PORT
3020 AND #$EF
3030 STA PORT;RAM IM ZEICHENSATZBEREICH EINSCHALTEN
3040 LDA #$12
3050 STA $E9FE;GRAPHIKENDEANFORDERUNG RUECKSETZEN
3070 K1 LDA $64;ZEICHEN LADEN
3080 JSR H3;UND DER GRAPHIKROUTINE UEBERREICHEN
3130 K2 JSR IN;NAECHSTES ZEICHEN ABHOLEN
3140 BVC K1;NEUE SA NEIN, DANN WEITER GRAPHIK
3160 LDY #$8D;SONST LETZTE ZEILE DRUCKEN
3170 JSR H6
3180 K3 LDA $7A;SCHON AUF PAPIER
3190 BNE K3;NEIN, DANN WARTEN
3200 LDA PORT;SONST ROM ZEICHENSATZ EINSCHALTEN
3210 ORA #$10
3220 STA PORT
3280 JMP $ED26;ENDE
4000 ;*** 7BIT-GRAPHIK CHR$(8) ***
4010 J1 CMP #$08;CHR$(8) = GRAPHIK EIN EMPFANGEN
4020 BNE H1;NEIN DANN WEITER UNTERSUCHEN
4030 LDA PORT;SONST RAM IM ZEICHENSATZBEREICH EIN
4040 AND #$EF
4050 STA PORT
4052 LDA #$00;SKIP SPACE IM RAM LOESCHEN
4054 LDX #$07; DAMIT TABULATORFUNKTION AUCH IM
4056 H0 STA $0900,X;GRAPHIKMODUS FUNKTIONIERT
4058 DEX
4059 BPL H0
4060 LDA #$12;ZEILENABSTAND GRAPHIKKONFORM SETZEN
4070 STA $86
4080 STA $E9FE;GRAPHIKENDEANFORDERUNG RUECKSETZEN
4090 STA $E9FF;GRAPHIKMODUS ANZEIGEN
4100 RTS;ZURUECK ZU SA0
4150 H1 LDX $E9FF;GRAPHIK EINGESCHALTET
4160 CPX #$12
4170 BEQ H2;JA, DANN GRAPHIKBEHANDLUNG
4180 JMP OUT;SONST AUSGABE WIE GEWOHNT
4190 H2 CMP #$80;ISTS EIN STEUERZEICHEN
4195 AND #$7F;MSB LOESCHEN
4200 BCS H3;ALS GRAPHIKZEICHEN VERARBEITEN
4210 CMP #$0E;CHR$(14)
4220 BEQ H4;JA, DANN GRAPHIKENDE BEANTRAGEN
4230 CMP #$0F;CHR$(15)
4240 BNE H5;NEIN, DANN WEITER UNTERSUCHEN
4250 H4 STA $E9FE;GRAPHIKENDE ANFORDERN
4260 LDA #$24
4270 STA $86;ZEILENABSTAND KORRIGIEREN
4280 RTS;WEITER MIT SA0
4300 H6 LDA $82;ZEILE ABSCHLIESSEN
4310 BEQ H7;ZAHL DER SPALTEN DURCH 8 TEILBAR
4320 H8 LDA #$00;SONST AUF GANZES ZEICHEN ERGAENZEN
4330 JSR H3
4340 LDA $82
4350 BNE H8
4360 H7 STA $80;REGISTER RUECKSETZEN
4370 STA $81
4380 STA $83
4390 TYA
4400 JSR OUT;ZEILENENDE SIGNALISIEREN
4410 LDA $E9FE
4420 CMP #$12;GRAPHIKENDE ANGEFORDERT
4430 BEQ H9;NEIN, DANN ZURUECK ZU SA0
4435 H22 LDA $7A;SONST WARTEN, BIS MECHANIK FERTIG
4436 BNE H22
4440 LDA PORT;UND ZEICHENSATZ-ROM EINSCHALTEN
4450 ORA #$10
4460 STA PORT
4470 LDA #$24
4480 STA $E9FF
4490 H9 RTS;ZURUECK ZU SA0
4500 H5 JSR $EFA2;AUF TERMINATOR UNTERSUCHEN
4510 TAY
4520 H20 BCS H6;ZEILE AUSDRUCKEN FALLS TERMINATOR
4530 CMP #$1A;CHR$(26) = ZEICHEN MEHRFACH DRUCKEN
4540 BNE H10;NEIN, DANN WEITER UNTERSUCHEN
4550 JSR IN;ANZAHL HOLEN
4560 STA $85
4570 JSR IN;ZEICHEN HOLEN
4573 LDA $64
4574 BPL H12;ENDE, FALLS NICHT GUELTIGES ZEICHEN
4575 AND #$7F;MSB LOESCHEN
4580 STA $7F
4590 H11 LDA $7F
4600 JSR H3;ZEICHEN SO OFT AUSGEBEN WIE VERLANGT
4610 DEC $85
4620 BNE H11
4630 H12 RTS;ZURUECK ZU SA0
4640 H10 CMP #$0C;CHR$(12) = FORMFEED
4650 BNE H12;ZURUECK ZU SA0 FALLS NICHT
4660 TAY
4670 JMP H6;SONST ZEILE BEENDEN
4700 H3 LDX #$00;GRAPHIKZEICHENVERARBEITUNG
4705 STX $84
4710 LDX #$08
4715 H13 ROR A;ZEICHEN UMDREHEN
4720 ROL $84
4725 DEX
4730 BNE H13
4735 H23 LDA $81
4740 CMP #$E4;ERSTES ZEICHEN
4745 BCS H14
4750 ADC #$E4;JA DANN ADRESSOFFSET ADDIEREN
4755 STA $81
4760 H14 LDA $84
4762 LDX #$00
4765 STA ($80,X);ZEICHEN IN RAM
4770 INC $80
4775 BNE H15
4780 INC $81
4785 H15 DEC $82
4790 BPL H12;JEWEILS 8 ZEICHEN GEBEN EINS IM PUFFER
4800 LDA #$4F;80 ZEICHEN PRO ZEILE
4802 LDX $65
4805 CPX #$0E;SA 14
4807 BEQ H21
4810 LDA #$3B;SONST NUR 60 ZEICHEN
4812 H21 CMP $83
4815 BCS H16;ZEILENENDE NICHT ERREICHT
4817 LDY #$0D
4818 LDA #$00
4819 STA $82
4820 JSR H7;ZEILE ABSCHLIESSEN
4821 H24 LDA $7A
4822 BNE H24;AUSDRUCK ABWARTEN
4823 JMP H23;NEUE ZEILE BEGINNEN
4825 H16 LDX #$07;ZAEHLER 0..7 RUECKSETZEN
4830 STX $82
4835 LDA $83;UMRECHNUNG ZEICHENSATZPLATZ IN ASCII
4840 CMP #$20
4845 BCS H18
4850 ADC #$40
4855 BCC H19
4860 H18 CMP #$40
4865 BCC H19
4870 ADC #$1F
4875 H19 INC $83
4880 JMP OUT;ASCII CODE IN PUFFER
5000 *= $7F00;*** SA15 HEXDUMPMODE ***
5010 G1 JSR IN
5020 BVS G6
5030 J7 JSR $EFA2; ** _ ** EINSPRUNG HIER !
5040 BCC G1;AUF TERMINATOR WARTEN
5050 G4 JSR IN;ZEICHEN HOLEN
5060 BVS G2;FALLS SA GEWECHSELT, DIESE AUSGEBEN
5070 G5 LDA $64;SONST ZEICHEN LADEN,
5080 STA $80;SICHERN,
5090 JSR G3;HEXCODE BERECHNEN UND AUSGEBEN
5100 JMP G4;NAECHSTES ZEICHEN
5110 G2 LDA #$0D;NEUE SA MIT
5120 JSR OUT;NEUER ZEILE
5130 LDA #$2A;UND STERNCHEN WUERDIGEN
5140 JSR OUT
5150 CLV
5160 LDA $65;SA LADEN,
5170 STA $80;SICHERN,
5180 JSR G3;HEXCODE BERECHNEN UND AUSGEBEN
5190 JMP G5;ZUGEHOERIGES ZEICHEN HINTERHER
5200 G6 JMP $EE80;TERMINATOR ERROR
5210 G3 LSR A;HIGHNIBBLE BERECHNEN
5220 LSR A
5230 LSR A
5240 LSR A
5250 JSR G7;UND AUSGEBEN
5260 LDA $80;LOWNIBBLE BERECHNEN
5270 AND #$0F
5280 JSR G7;UND AUSGEBEN
5290 LDA #$20;LEERZEICHEN
5300 JSR OUT;ZWEIMAL
5310 JSR OUT;ZWISCHEN ZWEI BYTES AUSGEBEN
5320 RTS
5330 G7 CLC;NIBBLE IN HEXADEZIMALDARSTELLUNG
5340 ADC #$30;VERKLEIDEN
5350 CMP #$3A
5360 BCC G8
5370 ADC #$06
5380 G8 JSR OUT;UND IN DRUCKERPUFFER DRUECKEN
5390 RTS
8000 *= $7FF1;RESETVEKTOR
8010 LDA #$FF;RESET EINSPRUNG
8020 STA PORT;ALLE PORTPINS AUF HIGH
8030 STA $0242;ALLE PORTPINS ALS AUSGAENGE
8040 JMP $EA31;ZUM ALTEN EINSPRUNG
8050 .WORD $FFF1;NEUER RESETVEKTOR